﻿// See https://aka.ms/new-console-template for more information


/***
 *    依赖倒置原则(Dependence Inversion Principle)
 *    面向对象语言程序设计时,高层模块不要依赖于低层模块,二者应该通过抽象来依赖
 *    依赖抽象而不是依赖细节  (UI层不依赖于BLL而是依赖于IBLL,BLL不依赖于DAL,而是依赖于IDAL)
 * 
 */

using IOCDI.Factory;
using IOCDI.IBLL;
using IOCDI.IDAL;
using IOCDI.Model;
{
    //贯彻DIP---抽象不能直接实例化---但是又不要细节---来个第三方(IOCDI.Factory)
    IUserDAL userDAL = ObjectFactory.CreateUserDAL();
    IUserBLL userBLL = ObjectFactory.CreateUserBLL(userDAL);

    UserModel userModel=userBLL.Login("admin");
    Console.WriteLine(userModel.Name);

}

Console.ReadKey();


/***
 *  水波效应
 *  没有依赖倒置,低层的变化会让高层受到影响
 *  依赖倒置之后,低层的变化不会影响到高层
 *  因为抽象是稳定的,而细节是多边的
 * 
 */